package com.ruoyi.system.service.impl;

import java.util.ArrayList;
import java.util.List;
import com.baomidou.mybatisplus.core.toolkit.ObjectUtils;
import com.ruoyi.common.utils.DateUtils;
import com.ruoyi.common.utils.SecurityUtils;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import com.ruoyi.system.mapper.SysTestTableMapper;
import com.ruoyi.system.domain.SysTestTable;
import com.ruoyi.system.domain.bo.SysTestTableBo;
import com.ruoyi.system.domain.vo.SysTestTableVo;
import com.ruoyi.system.service.ISysTestTableService;
import com.baomidou.mybatisplus.core.conditions.query.LambdaQueryWrapper;
import com.baomidou.mybatisplus.core.toolkit.Wrappers;

/**
 * 测试单Service业务层处理
 *
 * @author HK
 * @date 2023-07-28
 */
@Service
public class SysTestTableServiceImpl implements ISysTestTableService
{
    private SysTestTableMapper sysTestTableMapper;

    @Autowired
    public void setSysTestTableMapper(SysTestTableMapper sysTestTableMapper) {
        this.sysTestTableMapper = sysTestTableMapper;
    }


    /**
     * 查询测试单
     *
     * @param id 测试单主键
     * @return 测试单
     */
    @Override
    public SysTestTableVo selectSysTestTableById(Long id)
    {
        //TODO 表以外的字段，写入vo
        return sysTestTableMapper.selectVoById(id);
    }

    /**
     * 查询测试单列表
     *
     * @param bo 测试单
     * @return 测试单
     */
    @Override
    public List<SysTestTableVo> selectSysTestTableList(SysTestTableBo bo)
    {
        LambdaQueryWrapper<SysTestTable> lqw = Wrappers.lambdaQuery();
        lqw.like(ObjectUtils.isNotEmpty(bo.getName()), SysTestTable::getName, bo.getName());
        lqw.eq(ObjectUtils.isNotEmpty(bo.getAge()), SysTestTable::getAge, bo.getAge());
        lqw.eq(ObjectUtils.isNotEmpty(bo.getTitle()), SysTestTable::getTitle, bo.getTitle());
        lqw.eq(SysTestTable::getDelFlag, 0);
        return sysTestTableMapper.selectVoList(lqw);
    }

    /**
     * 新增测试单
     *
     * @param bo 测试单
     * @return 结果
     */
    @Override
    public int insertSysTestTable(SysTestTableBo bo)
    {
        SysTestTable sysTestTable = tranEntityBeforeSave(bo);
        sysTestTable.setCreateBy(SecurityUtils.getUsername());
        sysTestTable.setCreateTime(DateUtils.getNowDate());
        validEntityBeforeSave(sysTestTable);
        return sysTestTableMapper.insert(sysTestTable);
    }

    /**
     * 修改测试单
     *
     * @param bo 测试单
     * @return 结果
     */
    @Override
    public int updateSysTestTable(SysTestTableBo bo)
    {
        SysTestTable sysTestTable = tranEntityBeforeSave(bo);
        sysTestTable.setUpdateTime(DateUtils.getNowDate());
        return sysTestTableMapper.updateById(sysTestTable);
    }

    /**
     * 批量删除测试单
     *
     * @param ids 需要删除的测试单主键
     * @return 结果
     */
    @Override
    public int deleteSysTestTableByIds(Long[] ids)
    {
        List<SysTestTable> list = new ArrayList<>();
        for (Long id : ids){
            SysTestTable sysTestTable = new SysTestTable();
            sysTestTable.setDelFlag(2);
            sysTestTable.setId(id);
            list.add(sysTestTable);
        }
        boolean bool = sysTestTableMapper.updateBatchById(list);
        return bool ? 1 : 0;
    }

    /**
     * 保存前的数据校验
     */
    private void validEntityBeforeSave(SysTestTable entity) {
        //TODO 做一些数据校验,如唯一约束
    }

    /**
    *   保存前的数据转换
    */
    private SysTestTable tranEntityBeforeSave(SysTestTableBo bo) {
        //TODO 做一些数据转换
        SysTestTable sysTestTable = new SysTestTable();
        BeanUtils.copyProperties(bo, sysTestTable);
        return sysTestTable;
    }
}
